03-149. 실무 활용방안
실무 활용 방안
고객 피드백 분석 시스템
class CustomerFeedbackAnalyzer:
def __init__(self):
self.feedback_data = []
self.analysis_results = {}
def collect_feedback(self, source, content, metadata=None):
"""다양한 소스에서 피드백 수집"""
feedback = {
'timestamp': datetime.now(),
'source': source, # 'review', 'social_media', 'survey' 등
'content': content,
'metadata': metadata or {}
}
self.feedback_data.append(feedback)
def analyze_feedback(self):
"""피드백 종합 분석"""
if not self.feedback_data:
return "분석할 데이터가 없습니다."
df = pd.DataFrame(self.feedback_data)
# 감정 분석
df['sentiment'] = df['content'].apply(analyze_sentiment)
# 키워드 추출
all_content = ' '.join(df['content'])
word_freq = Counter(all_content.split())
# 소스별 분석
source_analysis = df.groupby('source')['sentiment'].value_counts()
self.analysis_results = {
'total_feedback': len(df),
'sentiment_distribution': df['sentiment'].value_counts().to_dict(),
'top_keywords': dict(word_freq.most_common(10)),
'source_analysis': source_analysis.to_dict(),
'recent_feedback': df.tail(5)[['source', 'content', 'sentiment']].to_dict('records')
}
return self.analysis_results
def generate_report(self):
"""분석 리포트 생성"""
if not self.analysis_results:
self.analyze_feedback()
report = f"""
=== 고객 피드백 분석 리포트 ===
📊 전체 피드백 수: {self.analysis_results['total_feedback']}건
😊 감정 분포:
"""
for sentiment, count in self.analysis_results['sentiment_distribution'].items():
percentage = (count / self.analysis_results['total_feedback']) * 100
report += f" - {sentiment}: {count}건 ({percentage:.1f}%)\n"
report += f"\n🔍 주요 키워드:\n"
for word, freq in list(self.analysis_results['top_keywords'].items())[:5]:
report += f" - {word}: {freq}회\n"
return report
# 사용 예시
analyzer = CustomerFeedbackAnalyzer()
# 피드백 수집
analyzer.collect_feedback('review', '제품 품질이 정말 좋아요!', {'rating': 5})
analyzer.collect_feedback('social_media', '배송이 너무 늦어요 ㅠㅠ', {'platform': 'twitter'})
analyzer.collect_feedback('survey', '가격 대비 만족스럽습니다', {'survey_id': 'S001'})
# 분석 및 리포트 생성
report = analyzer.generate_report()
print(report)
실시간 모니터링
import time
from datetime import datetime, timedelta
class RealTimeMonitor:
def __init__(self):
self.alerts = []
self.metrics = {
'error_rate': 0,
'response_time': 0,
'user_sentiment': 'neutral'
}
def process_log_stream(self, log_entry):
"""실시간 로그 처리"""
parsed_log = parse_log_line(log_entry)
if parsed_log:
# 에러율 계산
if parsed_log['상태코드'] >= 400:
self.metrics['error_rate'] += 1
# 임계값 초과시 알림
if self.metrics['error_rate'] > 5: # 5개 이상 에러
self.create_alert('HIGH_ERROR_RATE',
f"에러율 임계값 초과: {self.metrics['error_rate']}건")
def process_feedback_stream(self, feedback):
"""실시간 피드백 처리"""
sentiment = analyze_sentiment(feedback)
# 부정적 피드백 급증 감지
if sentiment == 'negative':
self.create_alert('NEGATIVE_FEEDBACK',
f"부정적 피드백 감지: {feedback[:50]}...")
def create_alert(self, alert_type, message):
"""알림 생성"""
alert = {
'timestamp': datetime.now(),
'type': alert_type,
'message': message,
'severity': 'high' if 'HIGH' in alert_type else 'medium'
}
self.alerts.append(alert)
print(f"🚨 ALERT: {alert['message']}")
def get_dashboard_data(self):
"""대시보드용 데이터 반환"""
recent_alerts = [alert for alert in self.alerts
if alert['timestamp'] > datetime.now() - timedelta(hours=1)]
return {
'current_metrics': self.metrics,
'recent_alerts': recent_alerts,
'alert_count': len(recent_alerts)
}
# 사용 예시
monitor = RealTimeMonitor()
# 실시간 데이터 처리 시뮬레이션
sample_logs = [
'192.168.1.1 - - [10/Oct/2023:14:00:01 +0900] "GET /api/data HTTP/1.1" 500 0',
'192.168.1.2 - - [10/Oct/2023:14:00:02 +0900] "GET /api/data HTTP/1.1" 500 0'
]
sample_feedback = [
"서버가 자꾸 오류나요. 너무 불편해요.",
"사이트가 느려서 짜증나네요."
]
for log in sample_logs:
monitor.process_log_stream(log)
for feedback in sample_feedback:
monitor.process_feedback_stream(feedback)
# 대시보드 데이터 확인
dashboard_data = monitor.get_dashboard_data()
print(f"\n📊 대시보드 현황:")
print(f"현재 메트릭: {dashboard_data['current_metrics']}")
print(f"최근 알림 수: {dashboard_data['alert_count']}건")